package com.dev.op.util;

import java.util.BitSet;

public class SimpleBloom {
    private final BitSet bitSet;
    private final int size;
    private final int[] seeds;

    public SimpleBloom(BitSet bitSet, int size, int[] seeds) {
        this.bitSet = bitSet;
        this.size = size;
        this.seeds = seeds;
    }

    // 添加元素
    public void add(String value) {
        for (int seed : seeds) {
            int hash = hash(value, seed);
            bitSet.set(hash);
        }
    }

    // 判断可能是否存在
    public boolean mightContain(String value) {
        for (int seed : seeds) {
            int hash = hash(value, seed);
            if (!bitSet.get(hash)) {
                return false; // 只要一个位置为0，一定不存在
            }
        }
        return true; // 所有位置为1，可能存在（存在误判）
    }
    // 哈希函数 (种子越多越好)
    private int hash(String value, int seed) {
        int result = 0;
        for (int i = 0; i < value.length(); i++) {
            result = result * seed + value.charAt(i);
        }
        return Math.abs(result % size);
    }
}
